#ifndef DOCUMENT_OBJECT
#define DOCUMENT_OBJECT
#include <vector>
//class CKTexture;
//class CK3dEntity;
// --------- [5/13/2013 Administrator]
#include "PropertyContainer.h"
#include "PropertyStandard.h"
#include <bitset>

class Document_App;
namespace App
{


class DocumentObject : public App::PropertyContainer
{
	PROPERTY_HEADER(App::DocumentObject);

public:
	DocumentObject(void);
	virtual~DocumentObject(void);

	void setName(const char* name) {_name = name;}
	const char* name()const {return _name;}

	PropertyString Label;

	virtual const char* getViewProviderName(void) const {
		return "";
	}

	void setDocument(Document_App* pDocument);


public:

	virtual void addEntityProperty();

	virtual void setEntityProperty();

	/// returns the name which is set in the document for this object (not the name property!)
	const char *getNameInDocument(void) const;
	/// gets the document in which this Object is handled
	Document_App *getDocument(void) const;

	 friend class Document_App;

	 int _setAttribute(const char* propName,const QVariant& value);
	 int setCustomAttribute(const char* propName,const QVariant& value);

protected:
	std::bitset<32> StatusBis;

protected:
	const char*         _name;

	Document_App*      _pDocument;

	const std::string*   _pcNameInDocumet;

};

};













// class SceneEntityProperty
// {
// public:
// 	SceneEntityProperty();
// 	~SceneEntityProperty();
// public:
// 	std::vector<EntityTopProperty*> SceneEntityList;
// };



// 
// typedef std::vector<CKTexture*> TextureList;
//  struct MaterialProperty
//  {
// 	 TextureList texList;
//  };
// typedef std::vector<MaterialProperty*> MaterialList;
// 
// struct TopProperty
// {
// 	MaterialList matList;
// };
// 
// typedef std::vector<TopProperty*> TopPropertyList;
// struct EntityProperty
// {
// 	CK3dEntity*      Entity;
// 	TopPropertyList  topList;
// };
// typedef std::vector<EntityProperty*> EntityProList;

#endif